WRAP_CLASS("itk::FastMarchingImageFilter")

  WRAP_IMAGE_FILTER_REAL(2)

  BEGIN_MANAGED_PROPERTY("AlivePoints" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the list of Alive Points representing the initial front.")
    SET(MANAGED_PROPERTY_TYPE      "array< itkLevelSetNode^ >^")
    SET(MANAGED_PROPERTY_GET_BODY  "return itk::ManagedTypes::ToManagedLevelSetNodeContainer<NativeType::NodeType::PixelType, NativeType::NodeType::SetDimension>( m_PointerToNative->GetAlivePoints() );")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetAlivePoints( itk::ManagedTypes::ToNativeLevelSetNodeContainer<NativeType::NodeType::PixelType, NativeType::NodeType::SetDimension>(value) );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("TrialPoints" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the list of Trial Points representing the initial front.")
    SET(MANAGED_PROPERTY_TYPE      "array< itkLevelSetNode^ >^")
    SET(MANAGED_PROPERTY_GET_BODY  "return itk::ManagedTypes::ToManagedLevelSetNodeContainer<NativeType::NodeType::PixelType, NativeType::NodeType::SetDimension>( m_PointerToNative->GetTrialPoints() );")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetTrialPoints( itk::ManagedTypes::ToNativeLevelSetNodeContainer<NativeType::NodeType::PixelType, NativeType::NodeType::SetDimension>(value) );")
  END_MANAGED_PROPERTY()

#  BEGIN_MANAGED_METHOD("SetAlivePointsFromImage")
#    SET(MANAGED_METHOD_SUMMARY         "Set the list of Alive points from the given image.")
#    SET(MANAGED_METHOD_RETURN_TYPE     "void")
#    SET(MANAGED_METHOD_PARAMS          "itkImageBase^ image")
#    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetAlivePointsFromImage( (NativeType::LabelImageType*)image->NativePointer.ToPointer() );")
#    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->SetAlivePointsFromImage(image);")
#  END_MANAGED_METHOD()
#
#  BEGIN_MANAGED_METHOD("SetTrialPointsFromImage")
#    SET(MANAGED_METHOD_SUMMARY         "Set the list of Trial points from the given image.")
#    SET(MANAGED_METHOD_RETURN_TYPE     "void")
#    SET(MANAGED_METHOD_PARAMS          "itkImageBase^ image")
#    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetTrialPointsFromImage( (NativeType::LabelImageType*)image->NativePointer.ToPointer() );")
#    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->SetTrialPointsFromImage(image);")
#  END_MANAGED_METHOD()
#
#  BEGIN_MANAGED_METHOD("SetLabelImage")
#    SET(MANAGED_METHOD_SUMMARY         "Manually set the label image. AlivePoints and TrialPoints will be ignored.")
#    SET(MANAGED_METHOD_RETURN_TYPE     "void")
#    SET(MANAGED_METHOD_PARAMS          "itkImageBase^ image")
#    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetLabelImage( (NativeType::LabelImageType*)image->NativePointer.ToPointer() );")
#    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->SetLabelImage(image);")
#  END_MANAGED_METHOD()
#
#  BEGIN_MANAGED_METHOD("SetLabelImageFromContour")
#    SET(MANAGED_METHOD_SUMMARY         "Manually set the label image by computing the contour around the given binary image. AlivePoints and TrialPoints will be ignored.")
#    SET(MANAGED_METHOD_RETURN_TYPE     "void")
#    SET(MANAGED_METHOD_PARAMS          "itkImageBase^ image")
#    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetLabelImageFromContour( (NativeType::LabelImageType*)image->NativePointer.ToPointer() );")
#    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->SetLabelImageFromContour(image);")
#  END_MANAGED_METHOD()

  BEGIN_MANAGED_PROPERTY("SpeedConstant" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the Speed Constant. If the Speed Image is NULL, the SpeedConstant value is used for the whole level set. By default, the SpeedConstant is set to 1.0.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetSpeedConstant();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetSpeedConstant( value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("NormalizationFactor" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the Normalization Factor for the Speed Image. The values in the Speed Image is divided by this factor. This allows the use of images with integer pixel types to represent the speed.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetNormalizationFactor();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetNormalizationFactor( value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("StoppingValue" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the algorithm Stopping Value. The algorithm is terminated when the value of the smallest trial point is greater than the stopping value.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetStoppingValue();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetStoppingValue( value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("CollectPoints" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set if the algorithm should collect a container of all nodes which it has visited. Useful for creating Narrowbands for level set algorithms that supports narrow banding.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetCollectPoints();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetCollectPoints( value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("ProcessedPoints" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the list of Processed Points, useful for creating Narrowbands.")
    SET(MANAGED_PROPERTY_TYPE      "array< itkLevelSetNode^ >^")
    SET(MANAGED_PROPERTY_GET_BODY  "return itk::ManagedTypes::ToManagedLevelSetNodeContainer<NativeType::NodeType::PixelType, NativeType::NodeType::SetDimension>( m_PointerToNative->GetProcessedPoints() );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("OverrideOutputInformation" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set if the given output information is used or copied from the input speed image.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetOverrideOutputInformation();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetOverrideOutputInformation( value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("OutputSize" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the size of the output levelset image.")
    SET(MANAGED_PROPERTY_TYPE      "itkSize^")
    SET(MANAGED_PROPERTY_GET_BODY  "return itk::ManagedTypes::ToManagedSize<NativeType::LevelSetImageType::ImageDimension>( m_PointerToNative->GetOutputSize() );")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetOutputSize(itk::ManagedTypes::ToNativeSize<NativeType::LevelSetImageType::ImageDimension>( value ));")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("OutputSpacing" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the spacing of the output levelset image.")
    SET(MANAGED_PROPERTY_TYPE      "itkSpacing^")
    SET(MANAGED_PROPERTY_GET_BODY  "return itk::ManagedTypes::ToManagedSpacing<NativeType::LevelSetImageType::ImageDimension>(m_PointerToNative->GetOutputSpacing());")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetOutputSpacing(itk::ManagedTypes::ToNativeSpacing<NativeType::LevelSetImageType::ImageDimension>( value ));")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("OutputOrigin" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the origin of the output levelset image.")
    SET(MANAGED_PROPERTY_TYPE      "itkPoint^")
    SET(MANAGED_PROPERTY_GET_BODY  "return itk::ManagedTypes::ToManagedPoint<NativeType::LevelSetImageType::ImageDimension>(m_PointerToNative->GetOutputOrigin());")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetOutputOrigin(itk::ManagedTypes::ToNativePoint<NativeType::LevelSetImageType::ImageDimension>( value ));")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("OutputRegion" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the largest possible region of the output levelset image.")
    SET(MANAGED_PROPERTY_TYPE      "itkImageRegion^")
    SET(MANAGED_PROPERTY_GET_BODY  "return itk::ManagedTypes::ToManagedImageRegion<NativeType::LevelSetImageType::ImageDimension>( m_PointerToNative->GetOutputRegion() );")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetOutputRegion(itk::ManagedTypes::ToNativeImageRegion<NativeType::LevelSetImageType::ImageDimension>( value ));")
  END_MANAGED_PROPERTY()

END_WRAP_CLASS()

